home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MACD 5
/
MACD 5.bin
/
workbench
/
libs
/
intuisup.lha
/
Intuisup
/
source.lha
/
Editor
/
editor.c
< prev
next >
Wrap
C/C++ Source or Header
|
1992-10-02
|
25KB
|
912 lines
/* $Revision Header *** Header built automatically - do not edit! ***********
*
* (C) Copyright 1991 by Torsten Jürgeleit
*
* Name .....: editor.c
* Created ..: Sunday 22-Dec-91 21:22:28
* Revision .: 1
*
* Date Author Comment
* ========= ==================== ====================
* 02-Oct-92 Michael Bjerking New realese, better Screen/Window editor
* 22-Dec-91 Torsten Jürgeleit Created this file!
*
****************************************************************************
*
* Editor main display
*
* $Revision Header ********************************************************/
/* Includes */
#include "includes.h"
#include "defines.h"
#include "imports.h"
#include "protos.h"
/* Defines for editor gadgets */
#define FIRST_MODE_GADGET EDITOR_GADGET_CREATE
#define EDITOR_GADGET1_TYPE GADGET_DATA_TYPE_CYCLE
#define EDITOR_GADGET1_FLAGS (GADGET_DATA_FLAG_HOTKEY | GADGET_DATA_FLAG_TEXT_LEFT)
#define EDITOR_GADGET1_TEXT "_Type"
#define EDITOR_GADGET1_LEFT_EDGE (10 + (4 + 1) * 8)
#define EDITOR_GADGET1_TOP_EDGE 5
#define EDITOR_GADGET1_WIDTH 110
#define EDITOR_GADGET1_HEIGHT 15
#define EDITOR_GADGET1_TEXT_ATTR &topaz80_attr
#define EDITOR_GADGET1_ACTIVE 1
#define EDITOR_GADGET1_TEXT_ARRAY &template_type_text_array[0]
#define EDITOR_GADGET2_TYPE GADGET_DATA_TYPE_BUTTON
#define EDITOR_GADGET2_FLAGS (GADGET_DATA_FLAG_HOTKEY | GADGET_DATA_FLAG_BUTTON_TOGGLE)
#define EDITOR_GADGET2_LEFT_EDGE (EDITOR_GADGET1_LEFT_EDGE + EDITOR_GADGET1_WIDTH + 80 + 4 * 8)
#define EDITOR_GADGET2_TOP_EDGE 5
#define EDITOR_GADGET2_WIDTH ((6 + 3) * 8)
#define EDITOR_GADGET2_HEIGHT 15
#define EDITOR_GADGET2_TEXT "_Create"
#define EDITOR_GADGET2_TEXT_ATTR &topaz80_attr
#define EDITOR_GADGET3_TYPE GADGET_DATA_TYPE_BUTTON
#define EDITOR_GADGET3_FLAGS (GADGET_DATA_FLAG_HOTKEY | GADGET_DATA_FLAG_BUTTON_TOGGLE)
#define EDITOR_GADGET3_LEFT_EDGE (EDITOR_GADGET2_LEFT_EDGE + EDITOR_GADGET2_WIDTH + 10)
#define EDITOR_GADGET3_TOP_EDGE EDITOR_GADGET2_TOP_EDGE
#define EDITOR_GADGET3_WIDTH EDITOR_GADGET2_WIDTH
#define EDITOR_GADGET3_HEIGHT EDITOR_GADGET2_HEIGHT
#define EDITOR_GADGET3_TEXT "_Modify"
#define EDITOR_GADGET3_TEXT_ATTR &topaz80_attr
#define EDITOR_GADGET4_TYPE GADGET_DATA_TYPE_BUTTON
#define EDITOR_GADGET4_FLAGS (GADGET_DATA_FLAG_HOTKEY | GADGET_DATA_FLAG_BUTTON_TOGGLE)
#define EDITOR_GADGET4_LEFT_EDGE (EDITOR_GADGET3_LEFT_EDGE + EDITOR_GADGET3_WIDTH + 10)
#define EDITOR_GADGET4_TOP_EDGE EDITOR_GADGET2_TOP_EDGE
#define EDITOR_GADGET4_WIDTH EDITOR_GADGET2_WIDTH
#define EDITOR_GADGET4_HEIGHT EDITOR_GADGET2_HEIGHT
#define EDITOR_GADGET4_TEXT "C_lone"
#define EDITOR_GADGET4_TEXT_ATTR &topaz80_attr
#define EDITOR_GADGET5_TYPE GADGET_DATA_TYPE_BUTTON
#define EDITOR_GADGET5_FLAGS (GADGET_DATA_FLAG_HOTKEY | GADGET_DATA_FLAG_BUTTON_TOGGLE)
#define EDITOR_GADGET5_LEFT_EDGE EDITOR_GADGET2_LEFT_EDGE
#define EDITOR_GADGET5_TOP_EDGE (EDITOR_GADGET2_TOP_EDGE + EDITOR_GADGET2_HEIGHT + 5)
#define EDITOR_GADGET5_WIDTH EDITOR_GADGET2_WIDTH
#define EDITOR_GADGET5_HEIGHT EDITOR_GADGET2_HEIGHT
#define EDITOR_GADGET5_TEXT "_Delete"
#define EDITOR_GADGET5_TEXT_ATTR &topaz80_attr
#define EDITOR_GADGET6_TYPE GADGET_DATA_TYPE_BUTTON
#define EDITOR_GADGET6_FLAGS (GADGET_DATA_FLAG_HOTKEY | GADGET_DATA_FLAG_BUTTON_TOGGLE)
#define EDITOR_GADGET6_LEFT_EDGE EDITOR_GADGET3_LEFT_EDGE
#define EDITOR_GADGET6_TOP_EDGE EDITOR_GADGET5_TOP_EDGE
#define EDITOR_GADGET6_WIDTH EDITOR_GADGET2_WIDTH
#define EDITOR_GADGET6_HEIGHT EDITOR_GADGET2_HEIGHT
#define EDITOR_GADGET6_TEXT "_Edit"
#define EDITOR_GADGET6_TEXT_ATTR &topaz80_attr
#define EDITOR_GADGET7_TYPE GADGET_DATA_TYPE_BUTTON
#define EDITOR_GADGET7_FLAGS (GADGET_DATA_FLAG_HOTKEY | GADGET_DATA_FLAG_BUTTON_TOGGLE)
#define EDITOR_GADGET7_LEFT_EDGE EDITOR_GADGET4_LEFT_EDGE
#define EDITOR_GADGET7_TOP_EDGE EDITOR_GADGET5_TOP_EDGE
#define EDITOR_GADGET7_WIDTH EDITOR_GADGET2_WIDTH
#define EDITOR_GADGET7_HEIGHT EDITOR_GADGET2_HEIGHT
#define EDITOR_GADGET7_TEXT "_Use"
#define EDITOR_GADGET7_TEXT_ATTR &topaz80_attr
#define EDITOR_GADGET8_TYPE GADGET_DATA_TYPE_LISTVIEW
#define EDITOR_GADGET8_FLAGS GADGET_DATA_FLAG_HOTKEY
#define EDITOR_GADGET8_LEFT_EDGE 10
#define EDITOR_GADGET8_TOP_EDGE (EDITOR_GADGET1_TOP_EDGE + EDITOR_GADGET1_HEIGHT + 19)
#define EDITOR_GADGET8_WIDTH 242
#define EDITOR_GADGET8_HEIGHT 70
#define EDITOR_GADGET8_TEXT "Defined Tem_plates"
#define EDITOR_GADGET8_TEXT_ATTR &topaz80_attr
#define EDITOR_GADGET8_SPACING 0
#define EDITOR_GADGET8_TOP 1
#define EDITOR_GADGET8_LIST NULL
/* Statics & globals for editor main gadgets */
BYTE *template_type_text_array[]=
{
"Border", "Text", "Button", "Check", "Radio", "String", "Integer",
"Slider", "Scroller", "Cycle", "Count", "Listview", "Palette", NULL
};
STATIC struct GadgetData editor_gadget_data[]=
{
{
EDITOR_GADGET1_TYPE, /* gd_Type */
EDITOR_GADGET1_FLAGS, /* gd_Flags */
EDITOR_GADGET1_LEFT_EDGE, /* gd_LeftEdge */
EDITOR_GADGET1_TOP_EDGE,/* gd_TopEdge */
EDITOR_GADGET1_WIDTH, /* gd_Width */
EDITOR_GADGET1_HEIGHT, /* gd_Height */
EDITOR_GADGET1_TEXT, /* *gd_Text */
EDITOR_GADGET1_TEXT_ATTR, /* *gd_TextAttr */
{
0, /* gd_CyclePad */
EDITOR_GADGET1_ACTIVE, /* gd_CycleActive */
EDITOR_GADGET1_TEXT_ARRAY /* gd_CycleTextArray */
}
},
{
EDITOR_GADGET2_TYPE, /* gd_Type */
EDITOR_GADGET2_FLAGS, /* gd_Flags */
EDITOR_GADGET2_LEFT_EDGE, /* gd_LeftEdge */
EDITOR_GADGET2_TOP_EDGE,/* gd_TopEdge */
EDITOR_GADGET2_WIDTH, /* gd_Width */
EDITOR_GADGET2_HEIGHT, /* gd_Height */
EDITOR_GADGET2_TEXT, /* *gd_Text */
EDITOR_GADGET2_TEXT_ATTR, /* *gd_TextAttr */
{0, 0, 0}
},
{
EDITOR_GADGET3_TYPE, /* gd_Type */
EDITOR_GADGET3_FLAGS, /* gd_Flags */
EDITOR_GADGET3_LEFT_EDGE, /* gd_LeftEdge */
EDITOR_GADGET3_TOP_EDGE,/* gd_TopEdge */
EDITOR_GADGET3_WIDTH, /* gd_Width */
EDITOR_GADGET3_HEIGHT, /* gd_Height */
EDITOR_GADGET3_TEXT, /* *gd_Text */
EDITOR_GADGET3_TEXT_ATTR, /* *gd_TextAttr */
{0, 0, 0}
},
{
EDITOR_GADGET4_TYPE, /* gd_Type */
EDITOR_GADGET4_FLAGS, /* gd_Flags */
EDITOR_GADGET4_LEFT_EDGE, /* gd_LeftEdge */
EDITOR_GADGET4_TOP_EDGE,/* gd_TopEdge */
EDITOR_GADGET4_WIDTH, /* gd_Width */
EDITOR_GADGET4_HEIGHT, /* gd_Height */
EDITOR_GADGET4_TEXT, /* *gd_Text */
EDITOR_GADGET4_TEXT_ATTR, /* *gd_TextAttr */
{0, 0, 0}
},
{
EDITOR_GADGET5_TYPE, /* gd_Type */
EDITOR_GADGET5_FLAGS, /* gd_Flags */
EDITOR_GADGET5_LEFT_EDGE, /* gd_LeftEdge */
EDITOR_GADGET5_TOP_EDGE,/* gd_TopEdge */
EDITOR_GADGET5_WIDTH, /* gd_Width */
EDITOR_GADGET5_HEIGHT, /* gd_Height */
EDITOR_GADGET5_TEXT, /* *gd_Text */
EDITOR_GADGET5_TEXT_ATTR, /* *gd_TextAttr */
{0, 0, 0}
},
{
EDITOR_GADGET6_TYPE, /* gd_Type */
EDITOR_GADGET6_FLAGS, /* gd_Flags */
EDITOR_GADGET6_LEFT_EDGE, /* gd_LeftEdge */
EDITOR_GADGET6_TOP_EDGE,/* gd_TopEdge */
EDITOR_GADGET6_WIDTH, /* gd_Width */
EDITOR_GADGET6_HEIGHT, /* gd_Height */
EDITOR_GADGET6_TEXT, /* *gd_Text */
EDITOR_GADGET6_TEXT_ATTR, /* *gd_TextAttr */
{0, 0, 0}
},
{
EDITOR_GADGET7_TYPE, /* gd_Type */
EDITOR_GADGET7_FLAGS, /* gd_Flags */
EDITOR_GADGET7_LEFT_EDGE, /* gd_LeftEdge */
EDITOR_GADGET7_TOP_EDGE,/* gd_TopEdge */
EDITOR_GADGET7_WIDTH, /* gd_Width */
EDITOR_GADGET7_HEIGHT, /* gd_Height */
EDITOR_GADGET7_TEXT, /* *gd_Text */
EDITOR_GADGET7_TEXT_ATTR, /* *gd_TextAttr */
{0, 0, 0}
},
{
EDITOR_GADGET8_TYPE, /* gd_Type */
EDITOR_GADGET8_FLAGS, /* gd_Flags */
EDITOR_GADGET8_LEFT_EDGE, /* gd_LeftEdge */
EDITOR_GADGET8_TOP_EDGE,/* gd_TopEdge */
EDITOR_GADGET8_WIDTH, /* gd_Width */
EDITOR_GADGET8_HEIGHT, /* gd_Height */
EDITOR_GADGET8_TEXT, /* *gd_Text */
EDITOR_GADGET8_TEXT_ATTR, /* *gd_TextAttr */
{
EDITOR_GADGET8_SPACING, /* gd_ListViewSpacing */
EDITOR_GADGET8_TOP, /* gd_ListViewTop */
EDITOR_GADGET8_LIST /* gd_ListViewList */
}
},
{
INTUISUP_DATA_END /* mark end of gadget data array */
}
};
/* Defines for editor texts */
#define EDITOR_TEXT1_TYPE TEXT_DATA_TYPE_TEXT
#define EDITOR_TEXT1_FLAGS TEXT_DATA_FLAG_PLACE_LEFT
#define EDITOR_TEXT1_LEFT_EDGE (EDITOR_GADGET2_LEFT_EDGE - 8)
#define EDITOR_TEXT1_TOP_EDGE (EDITOR_GADGET2_TOP_EDGE + (EDITOR_GADGET2_HEIGHT - 8) / 2)
#define EDITOR_TEXT1_TEXT "Mode"
#define EDITOR_TEXT1_TEXT_ATTR &topaz80_attr
#define EDITOR_TEXT2_TYPE TEXT_DATA_TYPE_TEXT
#define EDITOR_TEXT2_FLAGS TEXT_DATA_FLAG_BOLD
#define EDITOR_TEXT2_LEFT_EDGE EDITOR_GADGET5_LEFT_EDGE
#define EDITOR_TEXT2_TOP_EDGE (EDITOR_GADGET5_TOP_EDGE + EDITOR_GADGET5_HEIGHT + 10)
#define EDITOR_TEXT2_TEXT "Template Information:"
#define EDITOR_TEXT2_TEXT_ATTR &topaz80_attr
#define EDITOR_TEXT3_TYPE TEXT_DATA_TYPE_TEXT
#define EDITOR_TEXT3_FLAGS TEXT_DATA_FLAG_PLACE_LEFT
#define EDITOR_TEXT3_LEFT_EDGE (EDITOR_TEXT2_LEFT_EDGE + 20 + 4 * 8)
#define EDITOR_TEXT3_TOP_EDGE (EDITOR_TEXT2_TOP_EDGE + 14)
#define EDITOR_TEXT3_TEXT "Name"
#define EDITOR_TEXT3_TEXT_ATTR &topaz80_attr
#define EDITOR_TEXT4_TYPE TEXT_DATA_TYPE_TEXT
#define EDITOR_TEXT4_FLAGS TEXT_DATA_FLAG_PLACE_LEFT
#define EDITOR_TEXT4_LEFT_EDGE EDITOR_TEXT3_LEFT_EDGE
#define EDITOR_TEXT4_TOP_EDGE (EDITOR_TEXT3_TOP_EDGE + 12)
#define EDITOR_TEXT4_TEXT "Type"
#define EDITOR_TEXT4_TEXT_ATTR &topaz80_attr
#define EDITOR_TEXT5_TYPE TEXT_DATA_TYPE_TEXT
#define EDITOR_TEXT5_FLAGS TEXT_DATA_FLAG_PLACE_LEFT
#define EDITOR_TEXT5_LEFT_EDGE EDITOR_TEXT4_LEFT_EDGE
#define EDITOR_TEXT5_TOP_EDGE (EDITOR_TEXT4_TOP_EDGE + 12)
#define EDITOR_TEXT5_TEXT "Pos"
#define EDITOR_TEXT5_TEXT_ATTR &topaz80_attr
#define EDITOR_TEXT6_TYPE TEXT_DATA_TYPE_TEXT
#define EDITOR_TEXT6_FLAGS TEXT_DATA_FLAG_PLACE_LEFT
#define EDITOR_TEXT6_LEFT_EDGE EDITOR_TEXT5_LEFT_EDGE
#define EDITOR_TEXT6_TOP_EDGE (EDITOR_TEXT5_TOP_EDGE + 12)
#define EDITOR_TEXT6_TEXT "Size"
#define EDITOR_TEXT6_TEXT_ATTR &topaz80_attr
/* Statics for texts */
STATIC struct TextData editor_text_data[]=
{
{
EDITOR_TEXT1_TYPE, /* td_Type */
EDITOR_TEXT1_FLAGS, /* td_Flags */
EDITOR_TEXT1_LEFT_EDGE, /* td_LeftEdge */
EDITOR_TEXT1_TOP_EDGE, /* td_TopEdge */
EDITOR_TEXT1_TEXT, /* *td_Text */
EDITOR_TEXT1_TEXT_ATTR /* *td_TextAttr */
},
{
EDITOR_TEXT2_TYPE, /* td_Type */
EDITOR_TEXT2_FLAGS, /* td_Flags */
EDITOR_TEXT2_LEFT_EDGE, /* td_LeftEdge */
EDITOR_TEXT2_TOP_EDGE, /* td_TopEdge */
EDITOR_TEXT2_TEXT, /* *td_Text */
EDITOR_TEXT2_TEXT_ATTR /* *td_TextAttr */
},
{
EDITOR_TEXT3_TYPE, /* td_Type */
EDITOR_TEXT3_FLAGS, /* td_Flags */
EDITOR_TEXT3_LEFT_EDGE, /* td_LeftEdge */
EDITOR_TEXT3_TOP_EDGE, /* td_TopEdge */
EDITOR_TEXT3_TEXT, /* *td_Text */
EDITOR_TEXT3_TEXT_ATTR /* *td_TextAttr */
},
{
EDITOR_TEXT4_TYPE, /* td_Type */
EDITOR_TEXT4_FLAGS, /* td_Flags */
EDITOR_TEXT4_LEFT_EDGE, /* td_LeftEdge */
EDITOR_TEXT4_TOP_EDGE, /* td_TopEdge */
EDITOR_TEXT4_TEXT, /* *td_Text */
EDITOR_TEXT4_TEXT_ATTR /* *td_TextAttr */
},
{
EDITOR_TEXT5_TYPE, /* td_Type */
EDITOR_TEXT5_FLAGS, /* td_Flags */
EDITOR_TEXT5_LEFT_EDGE, /* td_LeftEdge */
EDITOR_TEXT5_TOP_EDGE, /* td_TopEdge */
EDITOR_TEXT5_TEXT, /* *td_Text */
EDITOR_TEXT5_TEXT_ATTR /* *td_TextAttr */
},
{
EDITOR_TEXT6_TYPE, /* td_Type */
EDITOR_TEXT6_FLAGS, /* td_Flags */
EDITOR_TEXT6_LEFT_EDGE, /* td_LeftEdge */
EDITOR_TEXT6_TOP_EDGE, /* td_TopEdge */
EDITOR_TEXT6_TEXT, /* *td_Text */
EDITOR_TEXT6_TEXT_ATTR /* *td_TextAttr */
},
{
INTUISUP_DATA_END /* mark end of text data array */
}
};
/* Defines for information texts */
#define INFO_TEXT_LINES 4
#define INFO_TEXT_LEFT_EDGE (EDITOR_TEXT3_LEFT_EDGE + 8)
#define INFO_TEXT_TOP_EDGE EDITOR_TEXT3_TOP_EDGE
#define INFO_TEXT_TYPE TEXT_DATA_TYPE_TEXT
#define INFO_TEXT_FLAGS TEXT_DATA_FLAG_COLOR2
#define INFO_TEXT_ATTR EDITOR_TEXT3_TEXT_ATTR
#define INFO_TEXT_MAX_WIDTH (EDITOR_WINDOW_WIDTH - INFO_TEXT_LEFT_EDGE)
#define INFO_TEXT_YOFFSET (EDITOR_TEXT4_TOP_EDGE - EDITOR_TEXT3_TOP_EDGE)
#define INFO_LINE_NAME 0
#define INFO_LINE_TYPE 1
#define INFO_LINE_POS 2
#define INFO_LINE_SIZE 3
/* Defines for menu */
#define MENU_TEXT_ATTR &topaz60_attr
#define MENU_PROJECT 0
#define ITEM_PROJECT_SCREEN 0
#define ITEM_PROJECT_WINDOW 1
#define ITEM_PROJECT_NEW 2
#define ITEM_PROJECT_LOAD 3
#define ITEM_PROJECT_APPEND 4
#define ITEM_PROJECT_SAVE 5
#define ITEM_PROJECT_SAVE_C 6
#define ITEM_PROJECT_ABOUT 7
#define ITEM_PROJECT_QUIT 8
#define MENU_EDIT 1
#define ITEM_EDIT_LOCK 0
#define ITEM_EDIT_UNLOCK 1
#define SUBITEM_EDIT_UNLOCK_SINGLE 0
#define SUBITEM_EDIT_UNLOCK_ALL 1
#define ITEM_EDIT_SNAP 2
/* Statics for menu */
STATIC struct MenuData editor_menu_data[]=
{
{
MENU_DATA_TYPE_TITLE, 0, "Project"
},
{
MENU_DATA_TYPE_ITEM, 0, "Screen", "R", 0
},
{
MENU_DATA_TYPE_ITEM, 0, "Window", "W", 0
},
{
MENU_DATA_TYPE_ITEM, 0, "New", "N", 0
},
{
MENU_DATA_TYPE_ITEM, 0, "Load", "L", 0
},
{
MENU_DATA_TYPE_ITEM, 0, "Append", "P", 0
},
{
MENU_DATA_TYPE_ITEM, 0, "Save", "S", 0
},
{
MENU_DATA_TYPE_ITEM, 0, "Save as C", "C", 0
},
{
MENU_DATA_TYPE_ITEM, 0, "About", "A", 0
},
{
MENU_DATA_TYPE_ITEM, MENU_DATA_FLAG_EMPTY_LINE, "Quit", "Q", 0
},
{
MENU_DATA_TYPE_TITLE, 0, "Edit"
},
{
MENU_DATA_TYPE_ITEM, MENU_DATA_FLAG_DISABLED, "Lock", "L", 0
},
{
MENU_DATA_TYPE_ITEM, MENU_DATA_FLAG_DISABLED, "Unlock", NULL, 0
},
{
MENU_DATA_TYPE_SUBITEM, 0, "Single", "U", 0
},
{
MENU_DATA_TYPE_SUBITEM, 0, "All", NULL, 0
},
{
MENU_DATA_TYPE_ITEM, 0, "Snap", NULL, 0
},
{
MENU_DATA_TYPE_SUBITEM, MENU_DATA_FLAG_ATTRIBUTE | MENU_DATA_FLAG_SELECTED, "1", NULL, ~(1 << 0)
},
{
MENU_DATA_TYPE_SUBITEM, MENU_DATA_FLAG_ATTRIBUTE, "2", NULL, ~(1 << 1)
},
{
MENU_DATA_TYPE_SUBITEM, MENU_DATA_FLAG_ATTRIBUTE, "4", NULL, ~(1 << 2)
},
{
MENU_DATA_TYPE_SUBITEM, MENU_DATA_FLAG_ATTRIBUTE, "6", NULL, ~(1 << 3)
},
{
MENU_DATA_TYPE_SUBITEM, MENU_DATA_FLAG_ATTRIBUTE, "8", NULL, ~(1 << 4)
},
{
MENU_DATA_TYPE_SUBITEM, MENU_DATA_FLAG_ATTRIBUTE, "10", NULL, ~(1 << 5)
},
{
MENU_DATA_TYPE_SUBITEM, MENU_DATA_FLAG_ATTRIBUTE, "12", NULL, ~(1 << 6)
},
{
MENU_DATA_TYPE_SUBITEM, MENU_DATA_FLAG_ATTRIBUTE, "14", NULL, ~(1 << 7)
},
{
MENU_DATA_TYPE_SUBITEM, MENU_DATA_FLAG_ATTRIBUTE, "16", NULL, ~(1 << 8)
},
{
MENU_DATA_TYPE_SUBITEM, MENU_DATA_FLAG_ATTRIBUTE, "18", NULL, ~(1 << 9)
},
{
MENU_DATA_TYPE_SUBITEM, MENU_DATA_FLAG_ATTRIBUTE, "20", NULL, ~(1 << 10)
},
{
INTUISUP_DATA_END /* mark end of menu data */
}
};
/* Editor action loop */
SHORT
editor_action_loop(VOID)
{
BOOL keepon = TRUE;
SHORT status = EDITOR_STATUS_NORMAL;
if (!(egl = ICreateGadgets(eri, &editor_gadget_data[0], 0, 0, NULL)))
{
status = EDITOR_ERROR_OUT_OF_MEM;
}
else
{
if (!(eml = ICreateMenu(eri, ewin, &editor_menu_data[0],
MENU_TEXT_ATTR, NULL)))
{
status = EDITOR_ERROR_OUT_OF_MEM;
}
else
{
struct TemplateList *tl = &template_list;
struct MsgPort *eup = ewin->UserPort, *pup = pwin->UserPort;
LONG emask = 1L << eup->mp_SigBit, pmask = 1L << pup->mp_SigBit, full_mask = emask | pmask;
/* project_file_requester->fr_Flags2 |= FR2F_LongPath;
strcpy(project_file_requester->fr_File, DEFAULT_PROJECT_FILE_NAME);
csource_file_requester->fr_FuncFlags |= FRF_DoColor;
csource_file_requester->fr_Flags2 |= FR2F_LongPath;
csource_file_requester->fr_Hail = CSOURCE_SAVE_HAIL_TEXT;
strcpy(csource_file_requester->fr_File, DEFAULT_CSOURCE_FILE_NAME);
*/
/* Init template list */
NewList((struct List *) & tl->tl_Fonts);
NewList((struct List *) & tl->tl_Templates);
strcpy(&tl->tl_ProjectID[0], DEFAULT_PROJECT_ID);
change_project_name(tl, DEFAULT_PROJECT_NAME, -1);
/* Set gadget defaults */
ISetGadgetAttributes(egl, EDITOR_GADGET_TYPE, 0L, 0L, USE_CURRENT_VALUE,
(LONG) DEFAULT_TEMPLATE_TYPE, (VOID *) USE_CURRENT_VALUE);
ISetGadgetAttributes(egl, FIRST_MODE_GADGET + DEFAULT_EDITOR_MODE,
0L, 0L, 1L, USE_CURRENT_VALUE, (VOID *) USE_CURRENT_VALUE);
print_project_window_title();
/* Editor main loop */
do
{
struct Message *msg;
SHORT last_status;
/* Remove all IDCMP events from editor and project window */
while (msg = GetMsg(eup))
{
ReplyMsg(msg);
}
while (msg = GetMsg(pup))
{
ReplyMsg(msg);
}
/* Display editor texts and gadgets, start use mode and attach menu */
IClearWindow(eri, ewin, 0, 0, EDITOR_WINDOW_WIDTH,
EDITOR_WINDOW_HEIGHT, 0);
IDisplayTexts(eri, ewin, &editor_text_data[0], 0, 0, NULL);
IDisplayGadgets(ewin, egl);
IAttachMenu(ewin, eml);
if (editor_mode == EDITOR_MODE_USE)
{
start_gadget_use_mode();
}
/* Editor IDCMP loop */
do
{
LONG signals = Wait(full_mask);
if (signals & emask)
{
status = perform_editor_action();
}
if (signals & pmask)
{
status = perform_project_action();
}
}
while (status <= EDITOR_STATUS_NORMAL);
/* Remove editor gadgets, end gadget use mode and remove menu */
IRemoveGadgets(egl);
if (editor_mode == EDITOR_MODE_USE)
{
end_gadget_use_mode();
}
IRemoveMenu(eml);
/* Perform special action given by status */
switch (last_status = status)
{
case EDITOR_STATUS_EDIT:
if (selected_template)
{
status = edit_template_data();
}
break;
case EDITOR_STATUS_SCREEN:
status = change_project_screen();
break;
case EDITOR_STATUS_WINDOW:
status = change_project_window();
break;
case EDITOR_STATUS_NEW:
if (!(tl->tl_Flags & TEMPLATE_LIST_FLAG_CHANGED) ||
ok_cancel_requester(" New ", "Project changed and"
" not saved.\\n\\nDo you really"
" want to start a new project?") == TRUE)
{
status = new_project(tl,
TEMPLATE_LIST_FLAG_DEFAULT_WINDOW);
}
break;
case EDITOR_STATUS_LOAD:
if (!(tl->tl_Flags & TEMPLATE_LIST_FLAG_CHANGED) ||
ok_cancel_requester(" Load ", "Project changed and"
" not saved.\\n\\nDo you really"
" want to load a new project?") == TRUE)
{
status = load_project(LOAD_MODE_NORMAL);
}
break;
case EDITOR_STATUS_APPEND:
if (!(tl->tl_Flags & TEMPLATE_LIST_FLAG_CHANGED) ||
ok_cancel_requester(" Append ", "Project changed and"
" not saved.\\n\\nDo you really"
" want to append a new project?") == TRUE)
{
status = load_project(LOAD_MODE_APPEND);
}
break;
case EDITOR_STATUS_SAVE:
status = save_project();
break;
case EDITOR_STATUS_SAVE_C:
status = save_c_source();
break;
case EDITOR_STATUS_ABOUT:
about_requester();
break;
case EDITOR_ERROR_NO_WINDOW:
keepon = FALSE;
break;
}
if (last_status == EDITOR_STATUS_WINDOW || last_status ==
EDITOR_STATUS_NEW || last_status == EDITOR_STATUS_LOAD)
{
/* Get user port data from new project window */
pup = pwin->UserPort;
pmask = 1L << pup->mp_SigBit;
full_mask = emask | pmask;
}
if (status == EDITOR_STATUS_QUIT)
{
if (!(tl->tl_Flags & TEMPLATE_LIST_FLAG_CHANGED) ||
ok_cancel_requester(" Quit ", "Project changed and not"
" saved.\\n\\nDo you really want to quit?") == TRUE)
{
keepon = FALSE;
}
}
}
while (keepon == TRUE);
/* Free resources */
free_template_list(tl);
IFreeMenu(eml);
}
IFreeGadgets(egl);
}
return (status);
}
/* Perform editor action */
STATIC SHORT
perform_editor_action(VOID)
{
struct MsgPort *up = ewin->UserPort;
struct IntuiMessage *msg;
SHORT status = EDITOR_STATUS_NORMAL;
while (msg = IGetMsg(up))
{
USHORT entry, code = msg->Code;
LONG value;
switch (msg->Class)
{
case CLOSEWINDOW:
status = EDITOR_STATUS_QUIT;
break;
case ISUP_ID:
entry = code;
value = (LONG) msg->IAddress;
switch (entry)
{
case EDITOR_GADGET_TYPE:
template_type = value;
print_project_window_title();
break;
case EDITOR_GADGET_TEMPLATES:
clear_template_info();
if (get_template_by_num(value))
{
print_template_info();
}
break;
default:
change_editor_mode(entry, value);
break;
}
break;
case MENUPICK:
while (code != MENUNULL)
{
switch (MENUNUM(code))
{
case MENU_PROJECT:
switch (ITEMNUM(code))
{
case ITEM_PROJECT_SCREEN:
status = EDITOR_STATUS_SCREEN;
break;
case ITEM_PROJECT_WINDOW:
status = EDITOR_STATUS_WINDOW;
break;
case ITEM_PROJECT_NEW:
status = EDITOR_STATUS_NEW;
break;
case ITEM_PROJECT_LOAD:
status = EDITOR_STATUS_LOAD;
break;
case ITEM_PROJECT_APPEND:
status = EDITOR_STATUS_APPEND;
break;
case ITEM_PROJECT_SAVE:
status = EDITOR_STATUS_SAVE;
break;
case ITEM_PROJECT_SAVE_C:
status = EDITOR_STATUS_SAVE_C;
break;
case ITEM_PROJECT_ABOUT:
status = EDITOR_STATUS_ABOUT;
break;
case ITEM_PROJECT_QUIT:
status = EDITOR_STATUS_QUIT;
break;
}
break;
case MENU_EDIT:
switch (ITEMNUM(code))
{
case ITEM_EDIT_SNAP:
snap_offset = snap_offset_table[SUBNUM(code)];
break;
}
break;
}
code = IMenuItemAddress(eml, code)->NextSelect;
}
break;
}
IReplyMsg(msg);
}
return (status);
}
/* Change editor mode */
STATIC VOID
change_editor_mode(USHORT gadget, LONG value)
{
UBYTE new_mode = gadget - FIRST_MODE_GADGET;
USHORT active_mode_gadget = editor_mode + FIRST_MODE_GADGET;
if (gadget == active_mode_gadget)
{
/* If active mode gadget deselected so select it again */
ISetGadgetAttributes(egl, gadget, 0L, 0L, 1L, USE_CURRENT_VALUE,
(VOID *) USE_CURRENT_VALUE);
}
else
{
/* Deselect active mode gadget and set new editor mode */
ISetGadgetAttributes(egl, active_mode_gadget, 0L, 0L, 0L,
USE_CURRENT_VALUE, (VOID *) USE_CURRENT_VALUE);
/* Toggle gadget use mode */
if (new_mode == EDITOR_MODE_USE)
{
start_gadget_use_mode();
}
else
{
if (editor_mode == EDITOR_MODE_USE)
{
end_gadget_use_mode();
}
}
editor_mode = new_mode;
print_project_window_title();
}
}
/* Print infos about current selected template info */
VOID
print_template_info(VOID)
{
struct Template *tp = selected_template;
USHORT i, top_edge = INFO_TEXT_TOP_EDGE;
/* First clear old info texts */
if (info_displayed == TRUE)
{
IClearWindow(eri, ewin, INFO_TEXT_LEFT_EDGE, INFO_TEXT_TOP_EDGE,
INFO_TEXT_MAX_WIDTH, INFO_TEXT_TOP_EDGE + INFO_TEXT_LINES *
INFO_TEXT_YOFFSET - 1, 0);
draw_box_with_border(pwin, &info_template->tp_Box);
}
/* Now print new info texts */
for (i = 0; i < INFO_TEXT_LINES; i++)
{
BYTE text[80];
switch (i)
{
case INFO_LINE_NAME:
sprintf(&text[0], "%s", &tp->tp_TemplateName[0]);
break;
case INFO_LINE_TYPE:
sprintf(&text[0], "%s", template_type_text_array[tp->tp_Type]);
break;
case INFO_LINE_POS:
sprintf(&text[0], "%d,%d", tp->tp_Box.bo_X1, tp->tp_Box.bo_Y1);
break;
case INFO_LINE_SIZE:
sprintf(&text[0], "%dx%d", tp->tp_Box.bo_X2 - tp->tp_Box.bo_X1 +
1, tp->tp_Box.bo_Y2 - tp->tp_Box.bo_Y1 + 1);
break;
}
IPrintText(eri, ewin, &text[0], INFO_TEXT_LEFT_EDGE, top_edge,
INFO_TEXT_TYPE, INFO_TEXT_FLAGS, INFO_TEXT_ATTR);
top_edge += INFO_TEXT_YOFFSET;
}
draw_box_with_border(pwin, &tp->tp_Box);
info_template = tp;
info_displayed = TRUE;
}
/* Clear template info */
VOID
clear_template_info(VOID)
{
if (info_displayed == TRUE)
{
IClearWindow(eri, ewin, INFO_TEXT_LEFT_EDGE, INFO_TEXT_TOP_EDGE,
INFO_TEXT_MAX_WIDTH, INFO_TEXT_TOP_EDGE + INFO_TEXT_LINES *
INFO_TEXT_YOFFSET - 1, 0);
draw_box_with_border(pwin, &info_template->tp_Box);
info_template = NULL;
info_displayed = FALSE;
}
}
/* Start gadget use mode */
VOID
start_gadget_use_mode(VOID)
{
struct TemplateList *tl = &template_list;
USHORT num = tl->tl_GadgetTemplates;
SHORT status = EDITOR_STATUS_NORMAL;
if (num)
{
struct GadgetData *gd;
if (!(use_gd = gd = AllocMem((LONG) (num + 1) *
sizeof(struct GadgetData), (LONG) MEMF_PUBLIC)))
{
status = EDITOR_ERROR_OUT_OF_MEM;
}
else
{
struct Template *tp;
for (tp = get_head((struct List *) & tl->tl_Templates); tp;
tp = get_succ(&tp->tp_Node))
{
if (TEMPLATE_GROUP(tp) == TEMPLATE_GROUP_GADGET)
{
CopyMem((BYTE *) & tp->tp_Data.tp_GadgetData, (BYTE *) gd++,
(LONG) sizeof(struct GadgetData));
}
}
gd->gd_Type = INTUISUP_DATA_END; /* mark end of gadget data array */
if (!(use_gl = ICreateGadgets(pri, use_gd, 0, 0, NULL)))
{
FreeMem(use_gd, (LONG) (num + 1) * sizeof(struct GadgetData));
status = EDITOR_ERROR_OUT_OF_MEM;
}
else
{
IDisplayGadgets(pwin, use_gl);
}
}
show_error(status);
}
}
/* End gadget use mode */
VOID
end_gadget_use_mode(VOID)
{
USHORT num = template_list.tl_GadgetTemplates;
if (num)
{
IRemoveGadgets(use_gl);
IFreeGadgets(use_gl);
FreeMem(use_gd, (LONG) (num + 1) * sizeof(struct GadgetData));
}
}